package net.neptech.mapper;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import net.neptech.model.sys.Menu;
import net.neptech.utils.BeanCopyUtils;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface MenuMapper extends BaseMapper<Menu> {

    /**
     * 根据用户ID查询菜单
     *
     * @return 菜单列表
     */
    List<Menu> selectMenuTreeAll();
    /**
     * 根据用户ID查询菜单
     *
     * @param userId 用户ID
     * @return 菜单列表
     */
    List<Menu> selectMenuTreeByUserId(Long userId);
    /**
     * 根据用户查询系统菜单列表
     *
     * @param queryWrapper 查询条件
     * @return 菜单列表
     */
    List<Menu> selectMenuListByUserId(@Param(Constants.WRAPPER) Wrapper<Menu> queryWrapper);
    /**
     * 根据条件查询实体对象列表，并将其转换为指定的VO对象列表
     *
     * @param wrapper 查询条件Wrapper
     * @param voClass 要转换的VO类的Class对象
     * @return 查询到的VO对象列表，经过转换为指定的VO类后返回
     */
    default <T> List<T> selectVoList(Wrapper wrapper, Class<T> voClass) {
        List<Menu> list = this.selectList(wrapper);
        if (CollUtil.isEmpty(list)) {
            return CollUtil.newArrayList();
        }
        return BeanCopyUtils.copyBeanList(list, voClass);
    }

    List<String> selectMenuPermsByUserId(Long userId);
    
    List<String> selectMenuPermsByRoleName(String roleName);

    List<Long> selectMenuListByRoleId(Long roleId);
}
